/*
 * Copyright 2013 University of Padua, Italy
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package it.dei.unipd.healthservice.database;

import it.dei.unipd.healthservice.resource.Reclamo;
import it.dei.unipd.healthservice.resource.Ticket;


import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.*;

/**
 * Rappresenta i dati di un reclamo.
 * 
 * @author Nichele Dany
 * @version 1.00
 */
public class CreateReclamoDatabase {


	/**
	 * Connessione al database
	 */
	private final Connection con;

	/**
	 * il reclamo da creare
	 */
	private final Reclamo reclamo;
	/**
	 * vector dei ticket da creare
	 */
	private final Vector<Ticket>  ticket;

	/**
	 * Crea un nuovo reclamo nel database
	 * 
	 * @param con
	 *            connessione al database.
	 * @param reclamo
	 *            reclamo da creare.
	 * @param ticket
	 *            vector dei ticket da creare.           
	 */
	public CreateReclamoDatabase(Connection con, Reclamo reclamo, Vector <Ticket> ticket) {
		this.con = con;
		this.reclamo = reclamo;
		this.ticket = ticket;
	}

	/**
	 * Crea un nuovo reclamo nel database
	 * 
	 * @throws SQLException
	 *             in caso di problemi nell'accesso al database.
	 */
	public void createReclamo() throws SQLException {

		PreparedStatement pstmt = null;

		try {
			
			String statement = "START TRANSACTION;";
			
			statement = statement + " INSERT INTO Reclamo ("+
					"statoreclamo, dataapertura, idordine) VALUES ( '" +
					reclamo.getStatoGlobale() + "', "+
					"current_date, "+
					reclamo.getIdOrdine() + ");";
			//statement = statement + " SELECT currval('reclamo_idreclamo_seq') as id;";
			for(int i=0;i<ticket.size();i++)
			{
				
				statement = statement + " INSERT INTO Ticket (" +
						"statoticket, descrizione, idreclamo, idprodotto) VALUES ( '" +
						ticket.elementAt(i).getStatoSingolo() + "', '"+
						ticket.elementAt(i).getDescrizione() + "', "+
						"currval('reclamo_idreclamo_seq'), "+
						ticket.elementAt(i).getIdProdotto() + ");";
			}
			statement = statement + " COMMIT;";
			pstmt = con.prepareStatement(statement);
			pstmt.execute();

		} finally {
			if (pstmt != null) {
				pstmt.close();
			}

			con.close();
		}

	}
}
